import pluginVue from 'eslint-plugin-vue'
import vueTsEslintConfig from '@vue/eslint-config-typescript'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'

export default [
  {
    name: 'app/files-to-lint',
    files: ['**/*.{ts,mts,tsx,vue}'],
  },

  {
    name: 'app/files-to-ignore',
    ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
  },

  ...pluginVue.configs['flat/essential'],
  ...vueTsEslintConfig(),
  skipFormatting,
  {
    /*
     * "off" 或 0    ==>  关闭规则
     * "warn" 或 1   ==>  打开的规则作为警告（不影响代码执行）
     * "error" 或 2  ==>  规则作为一个错误（代码不能执行，界面报错）
     */
    rules: {
      // 行尾需要分号
      semi: 'off',
      // 要求使用 let 或 const 而不是 var
      'no-var': 'error',
      // 生产环境中警告 console 使用，开发环境中关闭规则
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
      // 生产环境中警告 debugger 使用，开发环境中关闭规则
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
      //Vue 组件的名称应该是多词的，以提高可读性和维护性
      'vue/multi-word-component-names': 'off',
      //关闭不允许使用namespace的限制
      '@typescript-eslint/no-namespace': 'off',
      //关闭ts中any的限制
      '@typescript-eslint/no-explicit-any': 'off',
      //关闭ts的不允许使用忽略命令
      '@typescript-eslint/ban-ts-comment': 'off',
      // 忽略解析虚拟模块
      'import/no-unresolved': 'off',
      // 引入模块排序规则 https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
      'import/order': [
        'error',
        {
          // 'newlines-between': 'always',
          groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'],
          // alphabetize: { order: 'asc', caseInsensitive: true },
        },
      ],
    },
  },
]
